#include <Arduino.h>
#include <Wire.h>
#include "device_yaogan.h"
#include "joystick.h"


#define SS_ADC A0      //对应摇杆的P3.5
#define ATMEGA_A5  A5  //对应摇杆的P3.6

extern unsigned char adc_buffer[]; //接收到的摇杆8个传感器数据


//在串口以十六进制形式输出字节流
void PrintHex(unsigned char *str,unsigned int len);
void decodeADCData();          //对IIC接收到的数据解析
void onReciveRequestWithIIC(); //返回摇杆初始化设置数据

void showAdcData()
{
  decodeADCData();   //对遥感IIC发送来的数据做解析,得到真实数据
  updateGamePad();   //更新USB要发送的动作
}


//IIC接收到游戏摇杆发来的数据
void receiveEvent(int howMany) {
   int x = Wire.readBytes(adc_buffer,8);
   showAdcData();
}
//从机收到主机请求交互初始化数据
void requestEvent() {
  onReciveRequestWithIIC();//返回摇杆初始化设置数据
}

void setup() {
  Serial.begin(115200);         //设置串口波特率
  pinMode(ATMEGA_A5,OUTPUT);
  digitalWrite(ATMEGA_A5,HIGH); // 写入高电平,不启动摇杆

  //初始化USB按键相关
  gamePadInit();
  
  yaoganInit();//初始化摇杆
  
  //设置IIC为从机,
  pinMode(2,INPUT);
  pinMode(3,INPUT);
  Wire.begin(0x50);             // 作为IIC从机接收摇杆地址发送的数据 0x50为摇杆的IIC地址
  Wire.onReceive(receiveEvent); // 注册摇杆主机发送来数据的arduino从机接收函数
  Wire.onRequest(requestEvent); // 注册摇杆主机请求数据的arduino发送数据函数
  delay(100);
  digitalWrite(ATMEGA_A5,LOW); // 写入低电平,启动摇杆
  delay(10);
}

void loop() {
  delay(1);
  bool isTestOK = testIICHardDevice();  //检测设备初始化是否正确
  if(!isTestOK)
  {
    Serial.println("init erro");
  }
}
